const fs = require('fs');
const path = require('path');

// 1. 配置基础路径（创建的文件夹放在当前目录下）
const baseDir = __dirname;
const folderName = 'filedir'; // 固定文件夹名称（按实验要求）
const folderPath = path.join(baseDir, folderName);

// 2. 配置用户输入交互（process.stdin 处理命令行输入）
const stdin = process.stdin;
stdin.setEncoding('utf8'); // 设置输入编码为UTF-8（支持中文）

// 3. 定义步骤流程：按顺序执行“创建文件夹→创建文件→删除文件”
const steps = [
  createFolder,   // 步骤1：创建文件夹
  createFile,     // 步骤2：在文件夹中创建文件
  deleteFile      // 步骤3：删除文件并退出
];
let currentStep = 0; // 当前执行步骤索引

// 启动第一步
runNextStep();

// 4. 步骤1：创建文件夹
function createFolder() {
  console.log('\n(1) 请输入要创建的文件夹（格式：mkdir filedir）：');
  stdin.once('data', (input) => {
    const [cmd, name] = input.trim().split(' '); // 解析输入（拆分命令和参数）
    
    // 验证输入格式
    if (cmd !== 'mkdir' || name !== folderName) {
      console.log(`错误：请按格式输入 "mkdir ${folderName}"`);
      return createFolder(); // 格式错误，重新输入
    }

    // 创建文件夹（recursive: false 表示不创建父目录，existsSync判断是否已存在）
    if (fs.existsSync(folderPath)) {
      console.log(`文件夹 "${folderName}" 已存在，跳过创建`);
      return runNextStep();
    }

    fs.mkdir(folderPath, (err) => {
      if (err) {
        console.log(`错误：创建文件夹失败\n原因：${err.message}`);
        return createFolder();
      }
      console.log(`文件夹创建成功！路径：${folderPath}`);
      runNextStep();
    });
  });
}

// 5. 步骤2：创建文件（在filedir中创建文件，内容为"hello node"）
function createFile() {
  console.log('\n(2) 请输入要创建的文件（格式：touch 文件名.txt）：');
  stdin.once('data', (input) => {
    const [cmd, fileName] = input.trim().split(' ');
    
    // 验证输入格式
    if (cmd !== 'touch' || !fileName) {
      console.log('错误：请按格式输入 "touch 文件名.txt"（如 touch file.txt）');
      return createFile();
    }

    const filePath = path.join(folderPath, fileName);
    const fileContent = 'hello node'; // 固定文件内容（按实验要求）

    // 写入文件（flag: 'w' 表示覆盖已有文件）
    fs.writeFile(filePath, fileContent, (err) => {
      if (err) {
        console.log(`错误：创建文件失败\n原因：${err.message}`);
        return createFile();
      }
      console.log(`文件创建成功！路径：${filePath}\n文件内容：${fileContent}`);
      runNextStep();
    });
  });
}

// 6. 步骤3：删除文件
function deleteFile() {
  console.log('\n(3) 请输入要删除的文件（格式：delete 文件名.txt）：');
  stdin.once('data', (input) => {
    const [cmd, fileName] = input.trim().split(' ');
    
    // 验证输入格式
    if (cmd !== 'delete' || !fileName) {
      console.log('错误：请按格式输入 "delete 文件名.txt"（如 delete file.txt）');
      return deleteFile();
    }

    const filePath = path.join(folderPath, fileName);

    // 检查文件是否存在
    if (!fs.existsSync(filePath)) {
      console.log(`错误：文件 "${fileName}" 不存在`);
      return deleteFile();
    }

    // 删除文件
    fs.unlink(filePath, (err) => {
      if (err) {
        console.log(`错误：删除文件失败\n原因：${err.message}`);
        return deleteFile();
      }
      console.log(`文件删除成功！已删除：${filePath}`);
      console.log('程序执行完成，退出');
      process.exit(0); // 退出程序
    });
  });
}

// 7. 执行下一步骤
function runNextStep() {
  currentStep++;
  if (currentStep <= steps.length) {
    steps[currentStep - 1]();
  }
}